using System;

namespace BEGDC.CC.BL.Workflow
{
	/// <summary>
	/// Represent all workflow definition functions
	/// </summary>
	public interface IDefinition
	{
		/// <summary>
		/// When implemented by a class, get cq process definition information 
		/// </summary>
		/// <returns>Process Definition Information</returns>
		ProcessStateList GetDefinition();

		ProcessStateList GetDefinition(string processName);

//		/// <summary>
//		/// When implemented by a class, get process definition information by specified ID
//		/// </summary>
//		/// <returns></returns>
//		ProcessStateList GetCRDefinition();

//		/// <summary>
//		/// When implemented by a class, get ccc process definition information by specified ID
//		/// </summary>
//		/// <returns></returns>
//		ProcessStateList GetCCCDefinition();

//		/// <summary>
//		/// 
//		/// </summary>
//		/// <returns></returns>
//		ProcessStateList GetTSDefinition();

		/// <summary>
		/// When implemented by a class, get cq process instance process states information by specified flow ID
		/// </summary>
		/// <param name="projectID">flow id</param>
		/// <returns></returns>
		ProcessStateList GetInstanceStates(int projectID);

//		/// <summary>
//		/// When implemented by a class, get cr process instance process states information by specified flow ID
//		/// </summary>
//		/// <param name="crID"></param>
//		/// <returns></returns>
//		ProcessStateList GetCRInstanceStates(int crID);

//		/// <summary>
//		/// When implemented by a class, get ccc process instance process states information by specified flow ID
//		/// </summary>
//		/// <param name="projectID"></param>
//		/// <returns></returns>
//		ProcessStateList GetCCCInstanceStates(int projectID);

//		/// <summary>
//		/// 
//		/// </summary>
//		/// <param name="tsRecordID"></param>
//		/// <returns></returns>
//		ProcessStateList GetTSInstanceStates(int tsRecordID);

//		/// <summary>
//		/// When implemented by a class, Get Process flow Tailor finromation
//		/// </summary>
//		/// <param name="projectID"></param>
//		/// <returns></returns>
//		ProjectTailor GetTailorConditions(int projectID);
//
//		/// <summary>
//		/// When implemented by a class, Get Process flow Tailor finromation
//		/// </summary>
//		/// <param name="flowID"></param>
//		/// <returns></returns>
//		ProjectTailor GetTailorConditions(long flowID);

		/// <summary>
		/// When implemented by a class, Get Process State NetBPM definition id
		/// </summary>
		/// <param name="stateKey">State Key</param>
		/// <returns>State Definition ID</returns>
		long GetStateID(string stateKey);

		//2007-03-05
		ProcessStateEnum CheckState( int projectID, string flowPhase );
		ProcessStateEnum CheckSubState( int projectID,string flowStep);
		string GetRoleByActivityState(long processDefinitionId, string activityStateName);
	}
}
